<?php

namespace app\api\model;

use Db;
class Index
{

    public static $floor_types = [ 1=>'低层', 2=>'中层', 3=>'高层' ];

    //圆周率
    const PI = 3.1415926;

    /**
     * 根据经纬度和半径计算出范围
     * @param string $lat 纬度
     * @param String $lng 经度
     * @param float $radius 半径
     * @return Array 范围数组
     */
    public static function calcScope($lng, $lat, $radius=5000) {

        $degree = (24901*1609)/360.0;
        $dpmLat = 1/$degree;

        $radiusLat = $dpmLat*$radius;
        $minLat = $lat - $radiusLat;       // 最大纬度
        $maxLat = $lat + $radiusLat;       // 最小纬度

        $mpdLng = $degree*cos($lat * (self::PI/180));
        $dpmLng = 1 / $mpdLng;
        $radiusLng = $dpmLng*$radius;
        $minLng = $lng - $radiusLng;      // 最大经度
        $maxLng = $lng + $radiusLng;      // 最小经度

        /** 返回范围数组 */
        $scope = array(
            'minLat'    =>  $minLat,
            'maxLat'    =>  $maxLat,
            'minLng'    =>  $minLng,
            'maxLng'    =>  $maxLng
        );
        return $scope;
    }

    /**
     * 获取两个经纬度之间的距离
     * @param  string $lat1 纬一
     * @param  String $lng1 经一
     * @param  String $lat2 纬二
     * @param  String $lng2 经二
     * @return float  返回两点之间的距离
     */
    public static function calcDistance($lat1, $lng1, $lat2, $lng2) {
        /** 转换数据类型为 double */
        $lat1 = doubleval($lat1);
        $lng1 = doubleval($lng1);
        $lat2 = doubleval($lat2);
        $lng2 = doubleval($lng2);
        /** 以下算法是 Google 出来的，与大多数经纬度计算工具结果一致 */
        $theta = $lng1 - $lng2;
        $dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
        $dist = acos($dist);
        $dist = rad2deg($dist);
        $miles = $dist * 60 * 1.1515;
        return ($miles * 1.609344);
    }


    //上传文件
    public function uploadFile()
    {
        $file = request()->file('file');  //获取到上传的文件
        return $this->ossUploadFile($file);
    }


    //oss上传文件
    public function ossUploadFile($file)
    {
        if ('' == $file) return '参数为空';
        $resResult = Image::open($file);
        // 尝试执行
        try {
            $config = Config::pull('alioss'); //获取Oss的配置
            //实例化对象 将配置传入
            $ossClient = new OssClient($config['KeyId'], $config['KeySecret'], $config['Endpoint']);

            //这里是有sha1加密 生成文件名 之后连接上后缀
            $fileName = 'img/' . sha1(date('YmdHis', time()) . uniqid()) . '.' . $resResult->type();
            //执行阿里云上传
            $result = $ossClient->uploadFile($config['Bucket'], $fileName, $file->getInfo()['tmp_name']);
            /**
             * 这个只是为了展示
             * 可以删除或者保留下做后面的操作
             */
            $arr = [
                //图片地址
                'imgurl' => $result['info']['url'],
                //数据库保存名称
                'dbimgName' => $fileName
            ];
        } catch (OssException $e) {
            return $e->getMessage();
        }
        //将结果输出
        return $arr;
    }


    //根据手机号生成token
    public static function createLoginToken($phone){

        return md5(md5($phone.time()).'99gkJGSjdg@#$@%sldg');
    }



    //保存查看记录到cookie
    public static function saveRecord($uid,$house_id,$type){

        //历史记录
//        $cacheKey = 'house_record_'.$type.'_'.$uid;
//        cookie($cacheKey,null);

        $info  = Db::name('look_house_record')->where(['house_type'=>$type,'app_uuid'=>$uid,'house_id'=>$house_id])->find();

        if($info){
            $res = Db::name('look_house_record')->where(['house_type'=>$type,'app_uuid'=>$uid,'house_id'=>$house_id])->update(['create_time'=>time()]);

        }else{
            $inData = array(
                'house_type'=>$type,
                'app_uuid'=>$uid,
                'house_id'=>$house_id,
                'create_time'=>time()
            );

            $res = Db::name('look_house_record')->insert($inData);
        }

        return $res;

//        $new_resord = $house_id;
//        $resord = empty(cookie($cacheKey))?'':cookie($cacheKey);
//
//        if($resord){
//            $resord = unserialize($resord);
//
//            foreach($resord as $k=>$v){
//
//                if($v==$house_id || $k>100){
//                    unset($resord[$k]);
//                }
//            }
//
//            array_unshift($resord,$new_resord);
//
//            cookie($cacheKey,serialize($resord),time()+157680000);
//
//        }else{
//            $resord = serialize([$new_resord]);
//
//            cookie($cacheKey,$resord,time()+157680000);
//
//        }
    }


}

